#include<bits/stdc++.h>
using namespace std;
int n,q,c,a,col[3003003],x,s,u;
int e[5005000],ne[5005000],h[5005000],cnt=0;
void add(int a,int b)
{
	e[cnt]=b,ne[cnt]=h[a],h[a]=cnt++;
	return ;
}
namespace sub1{
	int ans=0,a,b;
	int vis[100100];
	void dfs(int u,int b)
	{
		ans++,vis[u]=1;
		for(int i=h[u];i!=-1;i=ne[i])
		{
			int to=e[i];
			if(vis[to]||(col[to]&b)==0) continue;
			dfs(to,b);
		}
		return ;
	}
	void main()
	{
		while(q--)
		{
			cin>>b>>a;
			if(!(col[a]&b)) {cout<<"1\n";continue;}
			ans=0,dfs(a,b);
			cout<<ans<<'\n';
			for(int i=1;i<=n;i++) vis[i]=0;
		}
		return ;	
	}
}
int main()
{
	freopen("tree.in","r",stdin);
	freopen("tree.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	memset(h,-1,sizeof h);
	cin>>n>>q>>c;
	for(int i=1;i<=n;i++) cin>>col[i],col[i]=(1<<col[i]);
	for(int i=2;i<=n;i++) cin>>a,add(a,i),add(i,a);
	sub1::main();
	return 0;
}
